package model;
import java.util.List;
import java.util.ListIterator;
import java.util.ArrayList;
/**
* @author iulia This class represent a polynomial composed of monomials, whose
* coefficients have a generic type.
* @param <T>
*/
public abstract class Polynomial<T> {
public List<Monomial<T>> monomials;
public Polynomial() {
setMonomials(new ArrayList<Monomial<T>>());
}
// this method intends to add one more element to the monomials list
public abstract boolean addToMonomialsList(T coefficient, int exponent);
// this method return a printable form of the polynomial
public abstract String printPoly();
public List<Monomial<T>> getMonomials() {
return monomials;
}
public void setMonomials(List<Monomial<T>> monomials) {
this.monomials = monomials;
}
/**
* Returns the degree of the polynomial.
*
* @return
*/
public int getDegree() {
int monomialsSize = monomials.size();
if (monomialsSize > 0)
return monomials.get(monomialsSize - 1).getExponent();
return -1;
}
/**
* Returns the monomial having the exponent given as parameter.
*
* @param exponent
* @return
*/
public Monomial<T> getMonAtExp(int exponent) {
int i = 0;
while (i < monomials.size() && monomials.get(i).getExponent() != exponent)
i++;
if (i < monomials.size())
return monomials.get(i);
return null;
}
public ListIterator<Monomial<T>> iterator() {
return monomials.listIterator();
}
}